Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ερωτήσεις πάνω στα LINQ Samples (VB.NET 2010)

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 05-05-2012, 16:12. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-05-2012, 23:46 70201

    Ερωτήσεις πάνω στα LINQ Samples (VB.NET 2010)

    Ότι ερωτήσεις έχω πάνω στα LINQ Samples θα τα γράφω εδώ (άρα όσο προχωράω στα samples θα βάζω κι άλλα reply)

    Οκ, λοιπόν... κοιτάω αυτή τη σειρά κώδικα από τα LINQ Samples (Νο5) επί ώρα.. κάνω μικρο-αλλαγές... και δεν μπορώ να καταλάβω γιατί δουλεύει!


    Dim shortDigits = digits.Where(Function(digit, index) digit.Length() < index)


    Και πράγματι αναγνωρίζει ποια νούμερα μέσα από το "digits" έχει περισσότερα ψηφία από την τιμή του..

    μέχρι και το "where" είμαστε ΟΚ. μετά λέει "Funtion" αλλά με περιορίζει στο να βάλω μέσα του είτε [String] είτε [String, Integer] αν και όταν πάω πάνω του λέει
    [String, Boolean] είτε [String, Integer, Boolean]


    Μετά, αφήνοντας απόσταση ΔΕΝ με προτρέπει να γράψω τίποτα, και ούτε δείχνει κάτι στο description του.. όμως αν δεν γράψεις σου βγάζει πρόβλημα.
    Εδώ βλέπουμε γραμμένο το "digit.Length() < index"
    Θέλει μόνο ονόματα μεταβλητών που ΔΕΝ υπάρχουν - αν υπάρχει η μεταβλητή σου βγάζει πρόβλημα..
    και η μεταβλητή φυσικά μπορεί να έχει ότι όνομα νάναι..
    Άρα πως στο καλό κάνει αυτό που κάνει??

    Όλο το κομμάτι κώδικα είναι αυτό:

        Public Sub Linq5()
            Dim digits = New String() {"jhghj", "one", "two", "three", "four", "-one", "six", "seven", "eight", "nine"}
     
            Dim shortDigits = digits.Where(Function(digit, index) digit.Length() < index)
     
            WriteLine("Short digits:")
            For Each d In shortDigits
                WriteLine("The word " & d & " is shorter than its value.")
            Next
        End Sub

    Sample 12:

    δεν καταλαβαίνω ούτε αυτόν τον κώδικα. Δουλεύει, ναι.. αλλά όπως και πριν.. γιατί δουλεύει? δεν μπορώ να αντιληφθώ τι λέει. πως διαβάζεται...

    1
     
        Dim numsInPlace = numbers.Select(Function(num, index) New With {.Num = num, .InPlace = (num = index)})

    ολόκληρος ο κώδικας είναι ο:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Sub Linq12()
        Dim numbers As Integer() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}
    
        Dim numsInPlace = numbers.Select(Function(num, index) New With {.Num = num, .InPlace = (num = index)})
    
        Console.WriteLine("Number: In-place?")
        For Each n In numsInPlace
            Console.WriteLine(n.Num & ": " & n.InPlace)
        Next
    End Sub 

    και βλέπει αν οι αριθμοί είναι στη σωστή σειρά, και λέει True/False αναλόγως.

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Έχω θέμα και με το Sample 19.. 

    Δεν καταλαβαίνω αυτή τη σειρά:

    1
     
    Dim customerOrders = customerList.SelectMany(Function(cust, custIndex) From ord In cust.Orders Select "Customer #" & (custIndex + 1) & " has an order with OrderID " & ord.OrderID)

    ο κώδικας βγάζει σειρές με το εξής pattern: "Customer #{No} has an order with OrderID {OrderIdNum}"

    Όλες αυτές οι σειρές υπάρχουν μέσα σε αυτή τη μεταβλητή.. αλλά δεν καταλαβαίνω πως το κάνει.

    Ολόκληρος ο κώδικας είναι:

    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Public Sub Linq19()
            Dim customerOrders = customerList.SelectMany(Function(cust, custIndex) From ord In cust.Orders Select "Customer #" & (custIndex + 1) & " has an order with OrderID " & ord.OrderID)
    
            For Each Order In customerOrders
                Output &= vbCrLf & Order
            Next
    
            WriteLine(Output.Substring(2))
        End Sub

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Πρόβλημα και με το sample 25.

    Γενικά απότι βλέπω, πρόβλημα έχω στα samples που γράφουν μέσα τους το "function". Τα υπόλοιπα είναι απόλυτα κατανοητά...

    Αν αλλάξω το function σε Sub, δεν δουλεύει.. άρα το συγκεκριμένο function δεν είναι το ίδιο με αυτό που γράφουμε έξω έτσι? (δλδ με το π.χ. Public Shared Function MyFunction [Byval Var1 as SomeType, Byval Var2 as SomeType, ByRef Var3 As SomeType] )

    Συγκεκριμένα το 25 γράφει:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Public Sub Linq25()
            Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}
    
            Dim firstSmallNumbers = numbers.TakeWhile(Function(n, index) n >= index)
    
            WriteLine("First numbers not less than their position:")
            For Each n In firstSmallNumbers
                WriteLine(CStr(n))
            Next
        End Sub

    και όπως πάντα, το πρόβλημά μου βρίσκετε στη σειρά με το "Function":

    1
     
    Dim firstSmallNumbers = numbers.TakeWhile(Function(n, index) n >= index)


  •  05-05-2012, 16:12 70204 σε απάντηση της 70201

    Απ: Ερωτήσεις πάνω στα LINQ Samples (VB.NET 2010)

    Στο προηγούμενο thread έχω examples από ένα συσκεκριμένο πράγμα που δεν καταλαβαίνω (άμεσα συσχετισμένο με το "fucntion"). Στο reply αυτό αλλάζει η θεματική ενότητα.

    Έχω το sample 31:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Public Sub Linq31()
            Dim words = New String() {"aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"}
    
            Dim sortedWords = words.OrderBy(Function(word) word, New CaseInsensitiveComparer())
    
            ObjectDumper.Write(sortedWords)
        End Sub
        Public Class CaseInsensitiveComparer : Implements IComparer(Of String)
    
            Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements IComparer(Of String).Compare
                Return String.Compare(x, y, True)
            End Function
        End Class

    Ας μην μείνουμε στην 4η σειρά που έχει μέσα του το function. είναι ήδη φανερό ότι έχω πρόβλημα με αυτό.

    Πάμε λίγο στην 9η ως 13η σειρά..

    Είμαστε ΟΚ μέχρι και το  Public Class CaseInsensitiveComparer

    Μετά όμως, τι είναι αυτή η άνω/κάτω τελεία, το Implements και το IComparer? (δυστυχώς το ότι το Implement σημαίνει υλοποιώ, και το Compare συγκρίνω, δεν με βοηθάν καθόλου..)

    όσο για την επόμενη σειρά που μετά το "As Integer" βάζει κιάλλα πράγματα.. εδώ κιαν τάχασα..


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems